package com.kerrykidz.scmstock.service;

import java.util.List;

import com.kerrykidz.scminvoicing.dao.model.ScmInStgEntity;
import com.kerrykidz.scminvoicing.dao.model.ScmInstgPrdEntity;
import com.kerrykidz.scminvoicing.dao.model.ScmPrdStgEntity;
import com.kerrykidz.scminvoicing.dao.model.ScmPurOrderEntity;
import com.kerrykidz.system.vo.UserInfo;
import com.rdp.framework.exception.RDPException;

/**
 * 
 * @ClassName: IStockGoodsInService
 * @description: 商品入库模块服务类
 * @author: huanjiang
 * @date: 2014年8月21日 下午2:13:44
 * @version: V1.0
 * 
 */
public interface IStockGoodsInService {
	/**
	 * @Title: findScmInStgById
	 * @Description: 查询入库单 </br> 1：pkInstgId不为空，则根据pkInstgId查询特定的入库单</br>
	 *               2：pkInstgId为空，则查询入库单列表
	 * @param scmInStg
	 * @date: 2014年8月8日
	 * @return: List<ScmInStgEntity>
	 */
	ScmInStgEntity findScmInStg(ScmInStgEntity scmInStg) throws RDPException;

	/**
	 * @Title: findScmPurOrderForStock
	 * @Description:获得新增入库需要的采购订单实例
	 * @param: <@param scmPurOrder
	 * @date: 2014年8月12日
	 * @return: List<ScmPurOrderEntity>
	 */
	ScmPurOrderEntity findScmPurOrderForStock(ScmPurOrderEntity scmPurOrder)
			throws RDPException;

	/**
	 * 
	 * 
	 * @Title: updateScmPurOrderForStock
	 * @Description: <p>
	 *               入库时更新采购订单表
	 *               <p>
	 * @param: <p>
	 * @param scmPurOrder
	 *            <p>
	 * @date: 2014年8月14日
	 * @return: void
	 * @throws
	 * 
	 */
	void updateScmPurOrderForStock(ScmPurOrderEntity scmPurOrder)
			throws RDPException;

	/**
	 * 
	 * @Title: insertScmInstgPrd
	 * @Description: 商品入库时入库商品明细表插入数据
	 * @param scmInstgPrd
	 * @date: 2014年8月13日
	 * @return: void
	 * @throws
	 * 
	 */
	void insertScmInstgPrd(ScmInstgPrdEntity scmInstgPrd) throws RDPException;

	/**
	 * 
	 * 
	 * @Title: insertScmInStg
	 * @Description: 商品入库单表插入数据
	 * @param: <p>
	 * @param scmInStg
	 * @param: <p>
	 * @throws RDPException
	 *             <p>
	 * @date: 2014年8月14日
	 * @return: void
	 * @throws
	 * 
	 */
	void insertScmInStg(ScmInStgEntity scmInStg) throws RDPException;

	/**
	 * 
	 * @Title: insertScmPrdStg
	 * @Description:商品入库时商品库存表更新数据
	 * @param: scmPrdStg
	 * @date: 2014年8月13日
	 * @return: void
	 * @throws
	 * 
	 */
	void updateScmPrdStg(ScmPrdStgEntity scmPrdStg) throws RDPException;

	/**
	 * 
	 * @Title: insertScmPrdStg
	 * @Description:商品入库时商品库存表插入数据
	 * @param: scmPrdStg
	 * @date: 2014年8月13日
	 * @return: void
	 * @throws
	 * 
	 */
	void insertScmPrdStg(ScmPrdStgEntity scmPrdStg) throws RDPException;

	/**
	 * 
	 * 
	 * @Title: rollBackForStockIn
	 * @Description:删除入库单后，回滚更新商品库存
	 * @param: <p>
	 * @param fkInstgId
	 *            <p>
	 * @date: 2014年8月21日
	 * @return: void
	 * @throws
	 * 
	 */
	boolean rollBackForStockIn(String fkInstgId, ScmPrdStgEntity scmPrdStg)
			throws RDPException;

	/**
	 * 
	 * @Title: selectScmInStg
	 * @Description:查询入库清单
	 * @param: scmInStg
	 * @date: 2014年8月19日
	 * @return: ScmInStgEntity
	 * @throws
	 * 
	 */

	ScmInStgEntity selectScmInStg(String pkInstgId) throws RDPException;

	/**
	 * 
	 * @Title: selectScmInstgPrd
	 * @Description: 商品备注查询
	 * @param fkInstgId
	 * @date: 2014年8月20日
	 * @return: ScmInstgPrdEntity
	 * @throws
	 * 
	 */
	List<ScmInstgPrdEntity> findScmInstgPrd(String fkInstgId)
			throws RDPException;

	/**
	 * 
	 * @Title: stockGoodsInOpertion
	 * @Description: 商品入库操作 包括插入和更新数据
	 * @param userInfo 包含登录用户信息
	 * @param stockId 入库编号
	 * @param content 表格数据
	 * @param purordId 采购编号
	 * @param isGoOn true 入库继续 false 入库
	 * @throws RDPException
	 * @date: 2014年8月14日
	 */
	void stockGoodsInOpertion(UserInfo userInfo, String stockId,
			String content, String purordId, String fkAttFile)
			throws RDPException;
	
	/**
	 * 
	* @Title: getStockInCount
	* @Description: 商品入库单中查询当前订单数，
	* 用于判断删除入库单后，订单的到货状态：如果订单数为0，表示该订单未到货
	* @param: scmInStg
	* @date: 2014年8月28日
	* @return: ScmInStgEntity
	* @throws RDPException
	*
	 */
	 ScmInStgEntity getStockInCount(ScmInStgEntity scmInStg)throws RDPException;
}
